B Binance · The world's largest crypto exchangeBinance Sign up → AD OKX OKX · A leading global crypto exchangeOKX Sign up → AD
Crypto analysis tools Loading Data: Binance public API

🗓️ Bitcoin Monthly Returns

Pick BTC, ETH or any Binance coin for a year-by-month returns heatmap with mean, median and % up, this month vs past years, and weekday and hourly stats.

This month

Price (USDT)–
Month to date–
Same month in past: mean / median–
Same month in past: % up–
Best month ever–
Worst month ever–
–

Monthly returns

Loading

Monthly candles follow UTC, so a month starts at 09:00 on the 1st in Korea time. A dashed border marks a month that has not finished yet; "listing" is the first month of Binance trading, which is partial and opens at the listing price, so it is left out of the mean, median and % up. Hover a cell to see its open and close.

Average return by month

Bar = mean · white line = median

By weekday and hour

–

Unfamiliar term? → Crypto & Stock Glossary

For information only, not investment advice. Data comes from exchanges' public APIs and may be delayed or interrupted. Charts: TradingView Lightweight Charts™

What this tool does

Crypto traders love seasonal sayings: "Uptober", a weak September, quiet weekends. This tool checks them against the record. It builds a year-by-month returns heatmap from the full history of Binance monthly candles, shows how far the current month has moved compared with the same month in past years, and breaks returns, range and volume down by weekday and by hour of day. It works for Bitcoin and any other coin with a Binance USDT market, such as Ethereum, Solana or XRP.

How it is calculated

Monthly return = close ÷ open − 1 of each Binance monthly candle. Candles follow UTC, so a month starts at 00:00 UTC on the 1st (09:00 in Korea). Quarterly return = close of the quarter's last month ÷ open of its first month − 1; annual return = close of the year's last monthly candle ÷ open of its first − 1. The mean (arithmetic), median and % up (share of years with a return above zero) under the table use closed periods only; the month in progress and the first Binance trading month (partial, opening at the listing price) are left out. Cell color deepens as √(|return| ÷ cap) grows, with caps of 50% for months, 100% for quarters and 200% for years. Weekday statistics use the full daily history (UTC dates); hour-of-day statistics use the last 365 days of hourly candles, grouped in Korea time or UTC. For each candle the tool collects the return (close ÷ open − 1), the range ((high − low) ÷ open) and its share of quote volume (USDT), then reports mean, median and % up, with t = mean ÷ (sample standard deviation ÷ √samples). "Same stretch" compares, for each past year, the return from the open on the 1st to the close on today's date. The current month is refreshed about once a minute.

Reading the screen, section by section

Top controls: coin and period

The dropdown lists the top 80 Binance USDT-market coins by 24-hour quote volume, and the BTC, ETH, SOL, XRP, BNB, DOGE and ADA buttons are shortcuts for the coins people check most. Switching coins reloads monthly and daily candles from scratch, plus hourly candles if the Hour of day tab is open. Period offers Monthly and Quarterly; Quarterly groups the heatmap and the average bars into Q1 to Q4. The chosen coin, view, tab and metric stay in the address bar, so a shared link opens exactly what the sender saw. A common misunderstanding is that a recently listed coin shows a history as long as Bitcoin's; the table fills only from the month the coin started trading on Binance, so a given month may have just one or two samples.

This month: six cards

The cards show the price (in USDT, with a KRW reference from the USDT/KRW rate on Bithumb or Upbit), the month-to-date return (current price versus the open at 00:00 UTC on the 1st) with the day of the month in UTC, the mean and median of the same month in past years, how often that month closed higher, and the best and worst months on record. Price and month-to-date come from the unfinished monthly candle and change every 65 seconds; the other cards use only closed months and stay put until the month turns. The first month of Binance trading is partial and opens at the listing price, so it is left out of the mean, best and worst. A common misunderstanding is reading the past same-month mean as a target for this month; it covers whole months, so comparing it directly with a month only a few days old is not fair.

This month's summary paragraph

The text under the cards compares the month-to-date return with past years in several ways. It first gives the past mean, median and how many times the month rose, then ranks the current figure among all instances of that month including this year. Once daily candles are in, it adds the same stretch: for each past year, the return from the open on the 1st to the close on today's date (or the month's last day if shorter), shown as a mean and median, plus the mean return and number of rises from that date to month-end. Finally it names the months with the highest and lowest averages among those with at least two closed records. The rank uses a live figure, so it moves with intraday swings. Early in the month the same-stretch figures cover only a few days and are noisy, which is worth keeping in mind.

Monthly returns heatmap

Rows are years, newest on top; columns are January to December (or Q1 to Q4 in Quarterly view), and the rightmost column is the annual return. A month's return is the monthly close ÷ open − 1, a quarter's is the last month's close ÷ the first month's open − 1, and a year's is the last monthly close ÷ the first monthly open − 1. Monthly candles follow UTC, so in Korea a month turns at 9 a.m. on the 1st, and values can differ slightly from KRW charts on Korean exchanges that use local midnight. A dashed cell is the month in progress and updates every 65 seconds; cells tagged listing or from a given month are partial, left uncolored and excluded from the stats. Hover a cell to see its open and close. Scan a column top to bottom for seasonality, but remember that one big number easily draws the eye.

Stats rows and color scale

The four rows at the bottom give, for each column, the mean (arithmetic), the median, the % up (share of years with a return above zero) and the number of years. The month in progress, the listing month and partial quarters or years are all excluded; only closed periods count. Cell intensity is 0.1 + 0.62 × √(|return| ÷ cap), with caps of 50% per month, 100% per quarter and 200% per year, so anything beyond the cap gets the deepest shade. The % up row deepens the further it is from 50%. The scale strip under the table shows these steps. Binance history starts in August 2017, so each month has only around ten samples; a column where mean and median diverge sharply usually has one big year pulling the mean. Always read the sample row alongside.

Average return by month bars

This chart redraws the stats rows: the mean as a bar and the median as a horizontal line. The zero line sits in the middle, and bar height is scaled to the largest absolute value on screen. The current month (or quarter in Quarterly view) has a highlighted background and label. Hover a bar to see the mean, the median and how many times it rose. Only closed periods are used, so the bars do not move until the month ends, even as this month's figure changes. When a bar and its line sit on opposite sides of zero, the average and the typical year point in different directions, so do not judge a month by bar length alone. On narrow screens the numbers are hidden and only the bars remain.

Weekday and hour: controls

There is a grouping (Weekday or Hour of day), a metric (average return, range or volume share) and one more button group that depends on the grouping. Weekday lets you pick the period (All, 3Y, 1Y); in Hour of day the period buttons disappear and a time zone choice (KST or UTC) takes their place. Weekday groups the coin's full daily history by UTC date, so in Korea time Monday runs from 9 a.m. Monday to 9 a.m. Tuesday. Hour of day fetches about 8,760 hourly candles from the last 365 days in chunks of 1,000 the first time you open the tab, showing progress as it goes. The first candle (listing day or the window's first) and the candle in progress are excluded. A common misunderstanding is that changing the time zone changes the results; it only relabels the same candles shifted by nine hours.

Weekday and hour: bars, summary, table

The bars show the chosen metric across 7 weekdays or 24 hours, with the current weekday or hour highlighted. For average return the bar is the mean and the line the median; range is the average of (high − low) ÷ open; volume share is each slot's portion of total quote volume in USDT. The summary names the highest and lowest slots and, for weekdays, compares the average weekend range with weekdays, or for hours, names the busiest and quietest times. The table lists mean, median, % up, range, volume share, t and sample count, where t = mean ÷ (sample standard deviation ÷ √samples) and only slots with |t| of 2 or more are highlighted. Below 2 the mean is hard to tell apart from zero, and even above 2, comparing many slots at once means some will cross it by chance.

Keeping it open

With the page open, only the monthly candles are re-downloaded every 65 seconds, redrawing the month-to-date return, price, the in-progress heatmap cell and the rank in the summary. The update time appears to the second next to the This month title, and refreshing pauses while the browser tab is hidden, resuming when it is visible again. Daily candles (weekday stats and the same stretch) and hourly candles are fetched once and retried only after a failure, and the KRW rate is fetched once, so reload the page to see weekday stats that include days since you opened it. Around the turn of a month, especially 9 a.m. on the 1st in Korea time, the in-progress cell closes and joins the stats rows. Keep a minute chart open for intraday moves and a long-term indicator screen for cycle-level context, so the seasonality here can be read against other time scales.

  • Start with the month-to-date return and its rank in the summary.
  • Compare the current figure with the same-stretch mean and median.
  • After a day or month turns, reload to check the weekday stats and stats rows.

Things to know

Frequently asked questions

Why is there no Bitcoin data before 2017?

The tool uses Binance public API candles only, and BTC/USDT started trading on Binance on 17 August 2017. August 2017 is a partial listing month, so it is shown in the table but excluded from the statistics.

Is the month boundary the same as on other exchanges?

Binance monthly and daily candles roll over at 00:00 UTC. Exchanges or charts that use a different time zone draw their monthly candles from a different starting point, so their monthly returns can differ slightly.

How is the month in progress calculated?

It is the return from the open at 00:00 UTC on the 1st to the latest price, refreshed about once a minute. It is not included in the mean, median, % up or the best and worst months.

What does "same stretch" compare against?

Because the current month is not over, comparing it with full past months is unfair. So for each past year the tool computes the return from the open on the 1st to the close on today's date, and reports its mean and median, plus the return from that date to month-end.

Why does the hourly view use only the last year?

A year has about 8,760 hourly candles, which takes 9 requests of 1,000. Longer periods run into exchange rate limits, and the busiest hours shift with market structure, such as US spot ETF trading hours, so the last year describes today's market better.

For information only, not investment advice. Data comes from exchanges' public APIs and may be delayed or interrupted.

📚 Worth reading
⛏️How the Bitcoin Halving Works→ 🧭Bitcoin Long-Term Indicators: 200-Week MA, Mayer, Pi Cycle→ 📐Log vs Linear Charts: Why Long-Term Charts Use a Log Scale→ 🧭What cycle narratives actually do→
← All crypto tools